﻿using System;
using AZROLESLib;

namespace AzManContrib.MVC.Initialization
{
    public class WrappingAzManApplication<TClientContext> : IAzManApplication
        where TClientContext : IAzManClientContext, new()
    {
        public object GetProperty(int lPropId, object varReserved)
        {
            return null;
        }

        public void SetProperty(int lPropId, object varProp, object varReserved)
        {
        }

        public void AddPolicyAdministrator(string bstrAdmin, object varReserved)
        {
        }

        public void DeletePolicyAdministrator(string bstrAdmin, object varReserved)
        {
        }

        public void AddPolicyReader(string bstrReader, object varReserved)
        {
        }

        public void DeletePolicyReader(string bstrReader, object varReserved)
        {
        }

        public IAzScope OpenScope(string bstrScopeName, object varReserved)
        {
            return null;
        }

        public IAzScope CreateScope(string bstrScopeName, object varReserved)
        {
            return null;
        }

        public void DeleteScope(string bstrScopeName, object varReserved)
        {
            
        }

        public IAzOperation OpenOperation(string bstrOperationName, object varReserved)
        {
            return null;
        }

        public IAzOperation CreateOperation(string bstrOperationName, object varReserved)
        {
            return null;
        }

        public void DeleteOperation(string bstrOperationName, object varReserved)
        {
        }

        public IAzTask OpenTask(string bstrTaskName, object varReserved)
        {
            return null;
        }

        public IAzTask CreateTask(string bstrTaskName, object varReserved)
        {
            return null;
        }

        public void DeleteTask(string bstrTaskName, object varReserved)
        {
            
        }

        public IAzApplicationGroup OpenApplicationGroup(string bstrGroupName, object varReserved)
        {
            return null;
        }

        public IAzApplicationGroup CreateApplicationGroup(string bstrGroupName, object varReserved)
        {
            return null;
        }

        public void DeleteApplicationGroup(string bstrGroupName, object varReserved)
        {
        }

        public IAzRole OpenRole(string bstrRoleName, object varReserved)
        {
            return null;
        }

        public IAzRole CreateRole(string bstrRoleName, object varReserved)
        {
            return null;
        }

        public void DeleteRole(string bstrRoleName, object varReserved)
        {

        }

        public IAzClientContext InitializeClientContextFromToken(ulong ullTokenHandle, object varReserved)
        {
            return new TClientContext();
        }

        public void AddPropertyItem(int lPropId, object varProp, object varReserved)
        {
            
        }

        public void DeletePropertyItem(int lPropId, object varProp, object varReserved)
        {
            
        }

        public void Submit(int lFlags, object varReserved)
        {
            
        }

        public IAzClientContext InitializeClientContextFromName(string clientName, string domainName , object varReserved)
        {
            return null;
        }

        public void AddDelegatedPolicyUser(string bstrDelegatedPolicyUser, object varReserved)
        {
            
        }

        public void DeleteDelegatedPolicyUser(string bstrDelegatedPolicyUser, object varReserved)
        {
            
        }

        public IAzClientContext InitializeClientContextFromStringSid(string sidString, int lOptions, object varReserved)
        {
            return null;
        }

        public void AddPolicyAdministratorName(string bstrAdmin, object varReserved)
        {
            
        }

        public void DeletePolicyAdministratorName(string bstrAdmin, object varReserved)
        {
            
        }

        public void AddPolicyReaderName(string bstrReader, object varReserved)
        {
            
        }

        public void DeletePolicyReaderName(string bstrReader, object varReserved)
        {
            
        }

        public void AddDelegatedPolicyUserName(string bstrDelegatedPolicyUser, object varReserved)
        {
            
        }

        public void DeleteDelegatedPolicyUserName(string bstrDelegatedPolicyUser, object varReserved)
        {
            
        }

        public string Name
        {
            get { return null; }
            set {  }
        }

        public string Description
        {
            get { return null; }
            set { }
        }

        public string ApplicationData
        {
            get { return null; }
            set {  }
        }

        public string AuthzInterfaceClsid
        {
            get { return null; }
            set {  }
        }

        public string Version
        {
            get { return null; }
            set {  }
        }

        public int GenerateAudits
        {
            get { return default(int); }
            set {  }
        }

        public int ApplyStoreSacl
        {
            get { return default(int); }
            set {  }
        }

        public int Writable
        {
            get { return default(int); }
        }

        public object PolicyAdministrators
        {
            get { return null; }
        }

        public object PolicyReaders
        {
            get { return null; }
        }

        public IAzScopes Scopes
        {
            get { return null; }
        }

        public IAzOperations Operations
        {
            get { return new OperationList(); }
        }

        public IAzTasks Tasks
        {
            get { return null; }
        }

        public IAzApplicationGroups ApplicationGroups
        {
            get { return null; }
        }

        public IAzRoles Roles
        {
            get { return null; }
        }

        public object DelegatedPolicyUsers
        {
            get { return null; }
        }

        public object PolicyAdministratorsName
        {
            get { return null; }
        }

        public object PolicyReadersName
        {
            get { return null; }
        }

        public object DelegatedPolicyUsersName
        {
            get { return null; }
        }

        public IAzManClientContext InitializeClientContextFromToken(IntPtr userToken)
        {
            return new TClientContext();
        }
    }
}